home *** CD-ROM | disk | FTP | other *** search
- /* dragtest.e - Test of gtdrag.library 1996-12-17
- Based on Axel Dörfler's program.
- Converted to E by Daniel Rost.
- 1996-12-15
- small changes at insertat()/moveto() 1996-12-17 by Axel Dörfler
- Please note, that the executable program does not reflect these */
-
- OPT PREPROCESS
-
- MODULE 'exec/nodes','exec/lists','exec/ports',
- 'exec/memory','intuition/intuition','intuition/gadgetclass',
- 'libraries/gadtools','intuition/screens',
- 'utility/tagitem','gadtools','graphics/text',
- 'gtdrag','libraries/gtdrag'
-
- #define TLn(t) TextLength(scr.rastport,t,StrLen(t))
-
- DEF win:PTR TO window,glist=NIL:PTR TO gadget,
- lvgad[2]:ARRAY OF LONG,gad[3]:ARRAY OF LONG, ->array of ptr to gadget
- list[2]:ARRAY OF lh,node:PTR TO ln,
- in:PTR TO imagenode,txt:PTR TO LONG,newimg:PTR TO image,
- scr:PTR TO screen,vi:PTR TO LONG,fontheight
-
- PROC insertat(l:PTR TO lh,n:PTR TO ln,pos)
- DEF pn:PTR TO ln,i
-
- pn:=l
- FOR i:=0 TO pos-1
- pn:=pn.succ
- ENDFOR
- -> FOR(pn = l->lh_Head,i = 0;i<pos;pn = pn->ln_Succ,i++);
- Insert(l,n,pn)
- ENDPROC
-
- PROC moveto(n:PTR TO ln,l1:PTR TO lh,pos1,l2:PTR TO lh,pos2)
- DEF pn:PTR TO ln,i=0
-
- IF l1=l2 AND (pos1=pos2) THEN RETURN
- Remove(n)
-
- IF l1=l2 AND (pos1<pos2) THEN DEC pos2
-
- pn:=l2
- WHILE (i<pos2) AND pn.succ
- pn:=pn.succ
- INC i
- ENDWHILE
-
- Insert(l2,n,pn)
- ENDPROC
-
- PROC processmsg()
- DEF msg:PTR TO intuimessage,dm:PTR TO dragmsg,source,target,
- sel,ende=FALSE
-
- WHILE(ende=FALSE)
- WaitPort(win.userport)
- WHILE (msg:=GtD_GetIMsg(win.userport))
- IF (dm:=GtD_GetDragMsg())
- IF dm.sourceapp
- DisplayBeep(NIL)
- ELSE
- sel:=dm.type
- SELECT sel
- CASE DMT_GADGET
- target:=dm.target::draggadget.gadget.gadgetid
- source:=dm.source.gadget.gadgetid
-
- IF target=1 OR (target=2)
- IF source<3
- DEC source
- DEC target
- Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,-1,TAG_END])
- Gt_SetGadgetAttrsA(lvgad[1],win,NIL,[GTLV_LABELS,-1,TAG_END])
- moveto(dm.object,list[source],dm.sourceentry,list[target],dm.targetentry)
- Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,list[0],TAG_END])
- Gt_SetGadgetAttrsA(lvgad[1],win,NIL,[GTLV_LABELS,list[1],TAG_END])
- ELSE
- DEC target
- Gt_SetGadgetAttrsA(lvgad[target],win,NIL,[GTLV_LABELS,-1,TAG_END])
- NEW node
- node.name:=in.name
- insertat(list[target],node,dm.targetentry)
- Gt_SetGadgetAttrsA(lvgad[target],win,NIL,[GTLV_LABELS,list[target],TAG_END])
- ENDIF
- ENDIF
- target:=dm.target::draggadget.gadget.gadgetid
- SELECT target
- CASE 3
- DisplayBeep(NIL)
- CASE 4
- IF source=1 OR (source=2)
- Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,-1,TAG_END])
- NEW node
- node.name:=dm.object.name
- AddTail(list[source-1],node)
- Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,list[source-1],TAG_END])
- ELSE
- DisplayBeep(NIL)
- ENDIF
- CASE 5
- IF source=1 OR (source=2)
- Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,-1,TAG_END])
- Remove(dm.object)
- Dispose(dm.object)
- Gt_SetGadgetAttrsA(lvgad[source-1],win,NIL,[GTLV_LABELS,list[source-1],TAG_END])
- ELSE
- DisplayBeep(NIL)
- ENDIF
- ENDSELECT
- CASE DMT_UNKNOWN
- DisplayBeep(NIL)
- CASE DMT_WINDOW
- ENDSELECT
- ENDIF
- GtD_ReplyDragMsg(dm)
- ENDIF
- sel:=msg.class
- SELECT sel
- CASE IDCMP_GADGETDOWN
- CASE IDCMP_GADGETUP
- IF msg.iaddress::gadget.gadgetid=3
- Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,-1,TAG_END])
- NEW node
- node.name:=in.name
- AddTail(list[0],node)
- Gt_SetGadgetAttrsA(lvgad[0],win,NIL,[GTLV_LABELS,list[0],TAG_END])
- ENDIF
- CASE IDCMP_CLOSEWINDOW
- ende:=TRUE
- ENDSELECT
- GtD_ReplyIMsg(msg)
- ENDWHILE
- ENDWHILE
- ENDPROC
-
- PROC initwindow()
- DEF win:PTR TO window,ng:newgadget
-
- gad[0]:=CreateContext({glist})
-
- ng.leftedge:=8
- ng.topedge:=fontheight+7
- ng.width:=192
- ng.height:=11*fontheight+4
- ng.visualinfo:=vi
- ng.textattr:=scr.font
- ng.gadgettext:=NIL
- ng.userdata:=NIL
- ng.gadgetid:=1
- lvgad[0]:=CreateGadgetA(LISTVIEW_KIND,gad[0],ng,[GTLV_LABELS,list[0],TAG_END])
-
- ng.leftedge:=206
- ng.width:=186
- ng.gadgettext:=NIL
- ng.gadgetid:=ng.gadgetid+1
- lvgad[1]:=CreateGadgetA(LISTVIEW_KIND,lvgad[0],ng,[GTLV_LABELS,list[1],TAG_END])
-
- ng.topedge:=ng.topedge+ng.height+3
- ng.leftedge:=8
- ng.height:=fontheight+4
- ng.width:=TLn('new')+16
- ng.flags:=PLACETEXT_IN
- ng.gadgettext:='new'
- ng.gadgetid:=ng.gadgetid+1
- gad[0]:=CreateGadgetA(BUTTON_KIND,lvgad[1],ng,[GA_IMMEDIATE,TRUE,TAG_END])
-
- ng.leftedge:=ng.leftedge+ng.width+6
- ng.width:=TLn('Copy')+16
- ng.gadgettext:='Copy'
- ng.gadgetid:=ng.gadgetid+1
- gad[1]:=CreateGadgetA(BUTTON_KIND,gad[0],ng,[TAG_END])
-
- ng.leftedge:=ng.leftedge+ng.width+6
- ng.width:=TLn('Delete')+16
- ng.gadgettext:='Delete'
- ng.gadgetid:=ng.gadgetid+1
- gad[2]:=CreateGadgetA(BUTTON_KIND,gad[1],ng,[TAG_END])
-
- IF (win:=OpenWindowTagList(NIL,[WA_TITLE,'gtdrag - Test',
- WA_FLAGS, WFLG_CLOSEGADGET OR WFLG_DRAGBAR OR WFLG_DEPTHGADGET OR WFLG_ACTIVATE,
- WA_IDCMP, IDCMP_CLOSEWINDOW OR DRAGIDCMP,
- WA_WIDTH, 400,
- WA_HEIGHT, fontheight*13+23,
- WA_GADGETS, glist,
- TAG_END]))
- Gt_RefreshWindow(win,NIL)
- GtD_AddGadgetA(LISTVIEW_KIND,lvgad[0],win,[GTDA_MASK,1,GTDA_SAME,TRUE,TAG_END])
- GtD_AddGadgetA(LISTVIEW_KIND,lvgad[1],win,[GTDA_MASK,1,GTDA_SAME,TRUE,TAG_END])
- GtD_AddGadgetA(BUTTON_KIND,gad[0],win,[GTDA_IMAGES,TRUE,GTDA_OBJECT,in,
- GTDA_MASK, 2,
- GTDA_ACCEPTMASK, 0,
- GTDA_WIDTH,newimg.width,
- GTDA_HEIGHT,newimg.height,
- TAG_END])
- GtD_AddGadgetA(BUTTON_KIND,gad[1],win,[GTDA_ACCEPTMASK,1,TAG_END])
- GtD_AddGadgetA(BUTTON_KIND,gad[2],win,[GTDA_ACCEPTMASK,1,TAG_END])
- GtD_AddWindowA(win,[TAG_END])
- RETURN win
- ENDIF
- RETURN FALSE
- ENDPROC
-
- PROC init()
- DEF i
-
- list[0].tail:=NIL; list[0].tailpred:=list[0]; list[0].head:=list[0]+4
- list[1].tail:=NIL; list[1].tailpred:=list[1]; list[1].head:=list[1]+4
-
- FOR i:=0 TO 19
- NEW node
- node.name:=txt[i]
- AddTail(list[0],node)
- ENDFOR
- in.name:='** New **'
- in.image:=newimg
- ENDPROC
-
- PROC main()
- DEF newimgdata:PTR TO INT
-
- newimgdata:=NewM((SIZEOF INT)*52,MEMF_CHIP)
- CopyMem([ /* Plane 0 */
- $0000,$0020,$3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,
- $3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,
- $3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,$3FFF,$FFE0,
- $7FFF,$FFE0,
- /* Plane 1 */
- $FFFF,$FFC0,$FFFF,$FF80,$F3BF,$FF80,$F3BF,$FF80,
- $F5B3,$6D80,$F5AD,$6D80,$F6A1,$AB80,$F6AF,$AB80,
- $F72D,$D780,$F733,$D780,$FFFF,$FF80,$FFFF,$FF80,
- $8000,$0000]:INT,newimgdata,(SIZEOF INT)*52)
-
- newimg:=[0,0,27,13,2,newimgdata,$0003,$0000,NIL]:image
- txt:=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20']
- NEW in
-
- IF (gtdragbase:=OpenLibrary('gtdrag.library',1))
- IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))
- IF (GtD_AddAppA('dragtest',[TAG_END]))
- IF scr:=LockPubScreen(NIL)
- vi:=GetVisualInfoA(scr,[TAG_END])
- fontheight:=scr.font.ysize
- init()
- IF (win:=initwindow())
- processmsg()
- CloseWindow(win)
- ENDIF
-
- FreeVisualInfo(vi)
- UnlockPubScreen(NIL,scr)
- ENDIF
- GtD_RemoveApp()
- ENDIF
- CloseLibrary(gadtoolsbase)
- ENDIF
- CloseLibrary(gtdragbase)
- ENDIF
- ENDPROC
-
-